package com.cn.mmd.controller;

import com.alibaba.fastjson.JSONException;
import com.cn.mmd.model.*;
import com.cn.mmd.service.LogManageService;
import com.cn.mmd.service.QuestionnaireTemplateService;
import com.cn.mmd.service.QuestionnaireService;
import com.cn.mmd.tools.GetLimitNum;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 问卷模板控制类
 * Created by Administrator on 2016/7/27.
 */

@Controller
@RequestMapping(value = "QuestionnaireTemplate")

public class QuestionnaireTemplateController {

    @Autowired
    QuestionnaireTemplateService questionnaireTemplateService;
    @Autowired
    QuestionnaireService questionnaireService;
    @Autowired
    LogController logController;
    @Autowired
    LogManageService logManageService;

    /**
     * 设置问卷模板
     * @param request
     * @return
     * @throws com.alibaba.fastjson.JSONException
     */
    @RequestMapping(value = "insertQuestionnaireTemplate")
    public synchronized @ResponseBody
    Map<String,Object> insertQuestionnaireTemplate(HttpServletRequest request)throws Exception{

        Map<String,Object> map=new HashMap<String, Object>();


        //接收前台传来的json对象
        String questionnaire =request.getParameter("questionnaire").toString();

       // System.out.print(questionnaire);
        //转为json格式
        JSONObject jsonObject=JSONObject.fromObject(questionnaire);

        String managers=jsonObject.getString("publisherId");//设置模板人的id
        String questionnaireTitle = jsonObject.getString("questionnaireTitle");//问卷标题
        String questionnaireExplain=jsonObject.getString("questionnaireExplain");//问卷说明
        String publishObjects=jsonObject.getString("publishObjects");//问卷面向的群体，如课程、班级等
        String questionnaireResults=jsonObject.getString("questionnaireResult");//问卷问题数组

        QuestionnaireTemplate questionnaireTemplate= questionnaireTemplateService.selectPrimaryKey(questionnaireTitle);

        if (questionnaireTemplate!=null){

            map.put("code",201);
            map.put("message","该标题的问卷已经存在！");
//            map.put("data",questionnaireTemplate);
            return map;

        }else {

            JSONArray jsonArray=JSONArray.fromObject(questionnaireResults);//解析问卷问题数组
            QuestionnaireTemplate questionnaireTemplate1=new QuestionnaireTemplate(questionnaireTitle,questionnaireExplain,publishObjects);

            int a= questionnaireTemplateService.insertQuestionnaireTemplate(questionnaireTemplate1);//添加模板问卷
            if (a>0){//添加成功
                QuestionnaireTemplate questionnaireTemplate2= questionnaireTemplateService.selectPrimaryKey(questionnaireTitle);//查出当前模板问卷的id

                int templateid=questionnaireTemplate2.getTemplateid();//模板问卷id


                int j=0;
                int i=0;
                for(;i<jsonArray.size(); i++){
                    JSONObject jsonJ = jsonArray.getJSONObject(i);

                    int questionNumber=jsonJ.getInt("questionNumber");//问题序号
                    String questionContent= jsonJ.getString("questionContent");//问题内容
                    String options=jsonJ.getString("options");//问题选项
                    String optionsDescribe=jsonJ.getString("optionsDescribe");//选项描述
                    String problemTypes=jsonJ.getString("problemTypes");//问题类型
                    String questionState=jsonJ.getString("questionState");//问题头
                    String questionDescribe=jsonJ.getString("questionDescribe");//问题描述

                    System.out.println("问题描述："+questionDescribe);
                    //问题关联的三级指标名，选择题格式为：标签库名！三级指标。打分题格式为：选项！标签库名！三级指标1！！选项！标签库名！三级指标2！！...
                    //打分题与选择题格式不同，需前端判断拼接！！！！
                    //每个指标由标签库名和三级指标构成，用单感叹号拼接；打分题可能有多个关联的指标，用双感叹号拼接
                    String couplingIndex=jsonJ.getString("couplingIndex");
                    System.out.println("关联标签："+couplingIndex);

                    JSONArray optionJson=JSONArray.fromObject(options);
                    JSONArray optionsDescribeJson=JSONArray.fromObject(optionsDescribe);
                    JSONArray couplingIndexJson=null;
                    JSONArray scoreJson=null;

                    String op="",opDes="",coupInd="";

                    if (problemTypes.equals("选择题")){
                        coupInd=couplingIndex;
                        String score=jsonJ.getString("score");
                        scoreJson=JSONArray.fromObject(score);
                        System.out.println("这是道选择题");
                        for (int x=0;x<optionJson.size();x++){

                            if (opDes.equals("")){
                                opDes=optionsDescribeJson.get(x).toString();
                            }else {
                                opDes=opDes+"!!"+optionsDescribeJson.get(x).toString();
                            }
                            if (scoreJson.get(x).toString()==null||scoreJson.get(x).toString().equals("")){
                                System.out.println("这题没分数");
                                if (op.equals("")){
                                    op=""+0;
                                }else {
                                    op=op+"!!"+0;
                                }
                            }else {
                                if (op.equals("")){
                                    op=scoreJson.get(x).toString();
                                }else {
                                    op=op+"!!"+scoreJson.get(x).toString();
                                }
                            }

                        }

                    }else if (problemTypes.equals("打分题")){
                        couplingIndexJson=JSONArray.fromObject(couplingIndex);

                        for (int x=0;x<optionJson.size();x++){
                            if (op.equals("")){
                                op=optionJson.get(x).toString();
                            }else {
                                op=op+"!!"+optionJson.get(x).toString();
                            }
                            if (opDes.equals("")){
                                opDes=optionsDescribeJson.get(x).toString();
                            }else {
                                opDes=opDes+"!!"+optionsDescribeJson.get(x).toString();
                            }
                            if (couplingIndexJson.get(x).toString()==null||couplingIndexJson.get(x).toString().equals("")){

                                System.out.println("此问卷无标签");
                            }else {
                                if (coupInd.equals("")){
                                    coupInd=couplingIndexJson.get(x).toString();
                                }else {
                                    coupInd=coupInd+"!!"+couplingIndexJson.get(x).toString();
                                }
                            }
                        }
                    }

                    QuestionnaireResultTemplate questionnaireResultTemplate=new QuestionnaireResultTemplate();

                    questionnaireResultTemplate.setQuestionnaireid(templateid);
                    questionnaireResultTemplate.setQuestionnumber(questionNumber);
                    questionnaireResultTemplate.setQuestioncontent(questionContent);
                    questionnaireResultTemplate.setOptions(op);
                    questionnaireResultTemplate.setOptionsdescribe(opDes);
                    questionnaireResultTemplate.setCouplingindex(coupInd);
                    questionnaireResultTemplate.setProblemtypes(problemTypes);
                    questionnaireResultTemplate.setQuestionstate(questionState);
                    questionnaireResultTemplate.setQuestiondescribe(questionDescribe);

                    int b = questionnaireTemplateService.addQuestion(questionnaireResultTemplate);//添加问题
                    if (b>0){
                        j++;
                    }else {
                        map.put("code",202);
                        map.put("message","设置问题失败");
//                        map.put("data", "");

                        return map;
                    }
                }

                if (j==i){
                    //  List<QuestionnaireResult> questionnaireResult1=questionnaireService.selectQuestionPrimaryKey(questionnaireId);//查出当前问题信息

                    //添加日志！！
                    //操作内容
                    String logContent="设置模板问卷“"+questionnaireTitle+"”成功";
                    System.out.println(logContent);
                    logController.logManage(logContent, managers);

                    map.put("code",200);
                    map.put("message","设置模板问卷成功");
//                    map.put("data", "");
                }else{
                    map.put("code",202);
                    map.put("message","设置问题失败");
//                    map.put("data", "");
                    return map;
                }

            }else{
                map.put("code",203);
                map.put("message","设置模板问卷失败");
//                map.put("data","");
                return map;
            }

        }

        return map;
    }


    /**
     * 查询全部模板问卷
     * @param request
     * @return
     * @throws com.alibaba.fastjson.JSONException
     */
    @RequestMapping(value = "selectQuestionnaireTemplate")
    public synchronized @ResponseBody
    Map<String,Object> selectQuestionnaireTemplate(HttpServletRequest request)throws Exception {

        Map<String, Object> map = new HashMap<String, Object>();
        Map<String, Object> map1 = new HashMap<String, Object>();

        int startrow=Integer.parseInt(request.getParameter("startrow"));//查第几页
        int pageSize=Integer.parseInt(request.getParameter("pageSize"));//一页多少条数据

        int num=questionnaireTemplateService.countQuestionnaireTemplate();
        System.out.println("num的数量："+num);

        GetLimitNum G=new GetLimitNum();
        num=G.getLimitNum(num, pageSize);

        System.out.println("num的数量+："+num);
        int page=(startrow-1)*pageSize;//从哪一条开始
        System.out.println("page的值："+page);

        QuestionnaireTemplate questionnaireTemplate1=new QuestionnaireTemplate(page,pageSize);

        List<QuestionnaireTemplate> questionnaireTemplates= questionnaireTemplateService.selectAll(questionnaireTemplate1);

        if (questionnaireTemplates.size()>0){

            map1.put("list",questionnaireTemplates);
            map1.put("pages",num);

            map.put("code",200);
            map.put("message","查询成功");
            map.put("data",map1);
        }else {
            map.put("code",201);
            map.put("message","当前没有模板");
//            map.put("data","");
        }

        return map;
    }


    /**
     * 模糊查询模板问卷
     * @param request
     * @return
     * @throws com.alibaba.fastjson.JSONException
     */
    @RequestMapping(value = "vagueSelectTemplate")
    public synchronized @ResponseBody
    Map<String,Object> vagueSelectTemplate(HttpServletRequest request)throws Exception {

        Map<String, Object> map = new HashMap<String, Object>();


        System.out.println("进入模糊查询！！");

        String templateTitle=request.getParameter("templateTitle");//通过问卷名模糊查询
        int startrow=Integer.parseInt(request.getParameter("startrow"));//查第几页
        int pageSize=Integer.parseInt(request.getParameter("pageSize"));//一页多少条数据

//        System.out.println(templateTitle+"----"+startrow+"----"+pageSize);

        int num=questionnaireTemplateService.countTemplateByTitle(templateTitle);
//        System.out.println("num的数量："+num);

//        GetLimitNum G=new GetLimitNum();
//        int num1=G.getLimitNum(num, pageSize);

//        System.out.println("num的数量+："+num1);
//        int page=(startrow)*pageSize;//从哪一条开始
//        System.out.println("page的值："+page);

        QuestionnaireTemplate questionnaireTemplate1=new QuestionnaireTemplate(templateTitle,startrow,pageSize);

        List<QuestionnaireTemplate> questionnaireTemplates= questionnaireTemplateService.vagueSelectTemplate(questionnaireTemplate1);

        List<Map> mapList=new ArrayList<Map>();
        if (questionnaireTemplates.size()>0){

            for (int i=0;i<questionnaireTemplates.size();i++){
                Map<String, Object> map1 = new HashMap<String, Object>();
                map1.put("templateId",questionnaireTemplates.get(i).getTemplateid());
                map1.put("templateTitle",questionnaireTemplates.get(i).getTemplatetitle());
                map1.put("questionnaireExplain",questionnaireTemplates.get(i).getQuestionnaireexplain());
                map1.put("publishObjects",questionnaireTemplates.get(i).getPublishobjects());

                mapList.add(map1);
            }

            map.put("code",200);
            map.put("message","查询成功");
            map.put("data",mapList);
            map.put("total",num);

        }else {
            map.put("code",201);
            map.put("message","没有查询到相关问卷模板");
//            map.put("data","");
        }

//        System.out.println(map);
        return map;
    }

    /**
     * 删除模板问卷
     * @param request
     * @return
     * @throws com.alibaba.fastjson.JSONException
     */
    @RequestMapping(value = "delTemplate")
    public synchronized @ResponseBody
    Map<String,Object> delTemplate(HttpServletRequest request)throws Exception {

        Map<String, Object> map = new HashMap<String, Object>();

        int temId=Integer.parseInt(request.getParameter("templateId"));
        String manageId = request.getParameter("manageId");
        int a=questionnaireTemplateService.delTemplate(temId);
        if (a>0){
            Date date = new Date();
            SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            String logTime=time.format(date);
            LogManage logManage = new LogManage();
            logManage.setLogtime(logTime);
            logManage.setManageid(manageId);
            logManage.setLogcontent("删除问卷模板:"+temId);
            logManageService.insertSelective(logManage);

            map.put("code",200);
            map.put("message","删除问卷模板成功");
//            map.put("data","");

        }else {
            map.put("code",201);
            map.put("message","删除问卷模板失败");
//            map.put("data","");
        }

        return map;
    }

    /**
     * 修改模板问卷
     * @param request
     * @return
     * @throws com.alibaba.fastjson.JSONException
     */
    @RequestMapping(value = "updTemplate")
    public synchronized @ResponseBody
    Map<String,Object> updTemplate(HttpServletRequest request)throws Exception {

        Map<String, Object> map = new HashMap<String, Object>();

        int templateId=Integer.parseInt(request.getParameter("templateId"));
        String templateTitle=request.getParameter("templateTitle");
        String questionnaireExplain=request.getParameter("questionnaireExplain");
        String publishObjects=request.getParameter("publishObjects");
        QuestionnaireTemplate questionnaireTemplate=new QuestionnaireTemplate();
        questionnaireTemplate.setTemplateid(templateId);
        questionnaireTemplate.setTemplatetitle(templateTitle);
        questionnaireTemplate.setQuestionnaireexplain(questionnaireExplain);
        questionnaireTemplate.setPublishobjects(publishObjects);

        String manageId = request.getParameter("manageId");

        int a=questionnaireTemplateService.updTemplate(questionnaireTemplate);

        if (a>0){
            Date date = new Date();
            SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            String logTime=time.format(date);
            LogManage logManage = new LogManage();
            logManage.setLogtime(logTime);
            logManage.setManageid(manageId);
            logManage.setLogcontent("修改问卷模板:"+templateId);
            logManageService.insertSelective(logManage);

            map.put("code",200);
            map.put("message","修改问卷模板成功");
//            map.put("data","");

        }else {
            map.put("code",201);
            map.put("message","修改问卷模板失败");
//            map.put("data","");
        }

        return map;
    }

    /**
     * 查看问卷模板详情
     * @param request
     * @return
     * @throws com.alibaba.fastjson.JSONException
     */
    @RequestMapping(value = "selectTemplateParticulars")
    public synchronized @ResponseBody
    List selectTemplateParticulars(HttpServletRequest request)throws Exception {

//        Map<String, Object> map = new HashMap<String, Object>();
        List<Map> mapList=new ArrayList<Map>();
        int templateId=Integer.parseInt(request.getParameter("templateId"));

        System.out.println("进入后台"+templateId);

        List<QuestionnaireResultTemplate> questionnaireResultTemplates=questionnaireTemplateService.selectResultTemplate(templateId);

        System.out.println("查询详情");
        if (questionnaireResultTemplates!=null) {
            for (int i = 0; i < questionnaireResultTemplates.size(); i++) {
                System.out.println("问题描述：" + questionnaireResultTemplates.get(i).getQuestioncontent());
                Map<String, Object> map2 = new HashMap<String, Object>();
                String[] options = questionnaireResultTemplates.get(i).getOptions().split("!!");
                String[] optionsDescribes = questionnaireResultTemplates.get(i).getOptionsdescribe().split("!!");
                if (questionnaireResultTemplates.get(i).getProblemtypes().equals("选择题")) {

                    List<Map> mapList1 = new ArrayList<Map>();
                    for (int j = 0; j < options.length; j++) {
                        Map<String, Object> map1 = new HashMap<String, Object>();
                        String option = options[j];
                        String optionsDescribe = optionsDescribes[j];

                        map1.put("op", option);
                        map1.put("optionsDescribe", optionsDescribe);
                        mapList1.add(map1);
                    }
                    map2.put("templateId", questionnaireResultTemplates.get(i).getQuestionnaireid());
                    map2.put("questionNum", questionnaireResultTemplates.get(i).getQuestionnumber());
                    map2.put("questionContent", questionnaireResultTemplates.get(i).getQuestioncontent());
                    map2.put("opti", mapList1);
                    map2.put("couplingIndex", questionnaireResultTemplates.get(i).getCouplingindex());
                    map2.put("problemTypes", questionnaireResultTemplates.get(i).getProblemtypes());
                    map2.put("questionState", questionnaireResultTemplates.get(i).getQuestionstate());
                    map2.put("questionDescribe", questionnaireResultTemplates.get(i).getQuestiondescribe());

                    mapList.add(map2);
                } else if (questionnaireResultTemplates.get(i).getProblemtypes().equals("打分题")) {

                    if (questionnaireResultTemplates.get(i).getCouplingindex() == null || questionnaireResultTemplates.get(i).getCouplingindex().equals("")) {
                        List<Map> mapList1 = new ArrayList<Map>();
                        for (int j = 0; j < options.length; j++) {
                            Map<String,Object> map1 = new HashMap<String,Object>();
                            String option = options[j];
                            String optionsDescribe = optionsDescribes[j];


                            map1.put("op", option);
                            map1.put("optionsDescribe", optionsDescribe);
                            map1.put("couplingIndex", "");
                            mapList1.add(map1);
                        }
                        map2.put("templateId", questionnaireResultTemplates.get(i).getQuestionnaireid());
                        map2.put("questionNum", questionnaireResultTemplates.get(i).getQuestionnumber());
                        map2.put("questionContent", questionnaireResultTemplates.get(i).getQuestioncontent());
                        map2.put("opti", mapList1);
                        map2.put("problemTypes", questionnaireResultTemplates.get(i).getProblemtypes());
                        map2.put("questionState", questionnaireResultTemplates.get(i).getQuestionstate());
                        map2.put("questionDescribe", questionnaireResultTemplates.get(i).getQuestiondescribe());
                    } else {
                        String[] couplingIndexes = questionnaireResultTemplates.get(i).getCouplingindex().split("!!");
                        List<Map> mapList1 = new ArrayList<Map>();
                        for (int j = 0; j < options.length; j++) {
                            Map<String,Object> map1 = new HashMap<String,Object>();
                            String option = options[j];
                            String optionsDescribe = optionsDescribes[j];
                            String couplingIndex = couplingIndexes[j];

                            map1.put("op", option);
                            map1.put("optionsDescribe", optionsDescribe);
                            map1.put("couplingIndex", couplingIndex);
                            mapList1.add(map1);
                        }
                        map2.put("templateId", questionnaireResultTemplates.get(i).getQuestionnaireid());
                        map2.put("questionNum", questionnaireResultTemplates.get(i).getQuestionnumber());
                        map2.put("questionContent", questionnaireResultTemplates.get(i).getQuestioncontent());
                        map2.put("opti", mapList1);
                        map2.put("problemTypes", questionnaireResultTemplates.get(i).getProblemtypes());
                        map2.put("questionState", questionnaireResultTemplates.get(i).getQuestionstate());
                        map2.put("questionDescribe", questionnaireResultTemplates.get(i).getQuestiondescribe());
                    }


                    mapList.add(map2);
                }

            }
//            map.put("code",200);
//            map.put("message","成功");
//            map.put("data",mapList);
////            System.out.println(mapList);
//
//        }else {
//            System.out.println("else");
//            map.put("code",201);
//            map.put("message","失败");
//            map.put("data","");
//        }
//        System.out.println(map);
        }
        return mapList;
    }
}
